package cn.tedu.search.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

@Data
@Accessors(chain = true) //支持链式set赋值
@AllArgsConstructor //生成全参构造方法
@NoArgsConstructor //生成无参构造方法
//@Document时SpringDataElasticsearch框架标记一个对应ES库中的索引名称(表名)的注解
//indexName指定的索引(表名).如果不存在，会自动创建此索引(表)
@Document(indexName = "items")
public class Item implements Serializable {

    //Spring Data Elasticsearch 根据@Id注解标记实体类的主键
    @Id
    private Long id;

    //索引中的title是需要分词的字段
    //@Field标记Es中的一个字段.
    //text表示要分词的字符串,analyzer存放数据时使用的分词器,searchAnalyzer搜索时使用的分词器
    @Field(type = FieldType.Text,
            analyzer = "ik_max_word",
            searchAnalyzer = "ik_max_word")
    private String title;

    //Keyword表示不需要分词的"字符串"类型。
    @Field(type = FieldType.Keyword)
    private String category;

    @Field(type = FieldType.Keyword)
    private String brand;

    @Field(type = FieldType.Double)
    private Double price;

    //index = false 表示此属性(字段)在索引(表)中不会作为搜索条件
    //就是设置当前字段不创建索引的配置，可以节省一定的空间
    // 但是imgPath这个字段的值还是会存在Elasticsearch当中
    @Field(type = FieldType.Keyword , index = false)
    private String imgPath;
}
